--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LXST/Sinks.py b6660872db95be4bd0077911be7da61b73aae1d2 (b6660872) Text, 9.33 KB
Tff7b72import T7ee787RNS
Tff7b72import T7ee787math
Tff7b72import T7ee787time
Tff7b72import T7ee787threading
Tff7b72from T7ee787collections Tff7b72import Te6edf3deque
Tff7b72class T56d364LinuxBackendTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3SAMPLERATE Tff7b72= T79c0ff48000
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3preferred_deviceTff7b72=Tff7b72NoneTb4b4b4, Te6edf3samplerateTff7b72=Te6edf3SAMPLERATETb4b4b4)Tb4b4b4:
Tff7b72from T7ee787.T7ee787PlatformsT7ee787.T7ee787linux Tff7b72import Te6edf3soundcard
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Te6edf3samplerate
Tff7b72selfTff7b72.Td2a8ffsoundcard Tff7b72= Te6edf3soundcard
Tff7b72if Te6edf3preferred_deviceTb4b4b4:
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffget_speakerTb4b4b4(Te6edf3preferred_deviceTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Te6edf3soundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Te6edf3soundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUsing output device Tffd700{Tff7b72selfTff7b72.Td2a8ffdeviceTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffall_speakersTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffall_speakersTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdefault_speakerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffflushTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffget_playerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3samples_per_frameTff7b72=Tff7b72NoneTb4b4b4, Te6edf3low_latencyTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffplayerTb4b4b4(Te6edf3samplerateTff7b72=Tff7b72selfTff7b72.Td2a8ffsamplerateTb4b4b4, Te6edf3blocksizeTff7b72=Te6edf3samples_per_frameTb4b4b4)
Tff7b72def Td2a8ffrelease_playerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72pass
Tff7b72class T56d364AndroidBackendTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3SAMPLERATE Tff7b72= T79c0ff48000
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3preferred_deviceTff7b72=Tff7b72NoneTb4b4b4, Te6edf3samplerateTff7b72=Te6edf3SAMPLERATETb4b4b4)Tb4b4b4:
Tff7b72from T7ee787.T7ee787PlatformsT7ee787.T7ee787android Tff7b72import Te6edf3soundcard
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Te6edf3samplerate
Tff7b72selfTff7b72.Td2a8ffsoundcard Tff7b72= Te6edf3soundcard
Tff7b72if Te6edf3preferred_deviceTb4b4b4:
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffget_speakerTb4b4b4(Te6edf3preferred_deviceTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Te6edf3soundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Te6edf3soundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUsing output device Tffd700{Tff7b72selfTff7b72.Td2a8ffdeviceTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffall_speakersTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffall_speakersTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdefault_speakerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffflushTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffget_playerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3samples_per_frameTff7b72=Tff7b72NoneTb4b4b4, Te6edf3low_latencyTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffplayerTb4b4b4(Te6edf3samplerateTff7b72=Tff7b72selfTff7b72.Td2a8ffsamplerateTb4b4b4, Te6edf3blocksizeTff7b72=Te6edf3samples_per_frameTb4b4b4, Te6edf3low_latencyTff7b72=Te6edf3low_latencyTb4b4b4)
Tff7b72def Td2a8ffrelease_playerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72pass
Tff7b72class T56d364DarwinBackendTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3SAMPLERATE Tff7b72= T79c0ff48000
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3preferred_deviceTff7b72=Tff7b72NoneTb4b4b4, Te6edf3samplerateTff7b72=Te6edf3SAMPLERATETb4b4b4)Tb4b4b4:
Tff7b72from T7ee787.T7ee787PlatformsT7ee787.T7ee787darwin Tff7b72import Te6edf3soundcard
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Te6edf3samplerate
Tff7b72selfTff7b72.Td2a8ffsoundcard Tff7b72= Te6edf3soundcard
Tff7b72if Te6edf3preferred_deviceTb4b4b4:
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffget_speakerTb4b4b4(Te6edf3preferred_deviceTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Te6edf3soundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Te6edf3soundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUsing output device Tffd700{Tff7b72selfTff7b72.Td2a8ffdeviceTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffall_speakersTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffall_speakersTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdefault_speakerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffflushTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffget_playerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3samples_per_frameTff7b72=Tff7b72NoneTb4b4b4, Te6edf3low_latencyTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffplayerTb4b4b4(Te6edf3samplerateTff7b72=Tff7b72selfTff7b72.Td2a8ffsamplerateTb4b4b4, Te6edf3blocksizeTff7b72=Te6edf3samples_per_frameTb4b4b4)
Tff7b72def Td2a8ffrelease_playerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72pass
Tff7b72class T56d364WindowsBackendTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3SAMPLERATE Tff7b72= T79c0ff48000
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3preferred_deviceTff7b72=Tff7b72NoneTb4b4b4, Te6edf3samplerateTff7b72=Te6edf3SAMPLERATETb4b4b4)Tb4b4b4:
Tff7b72from T7ee787.T7ee787PlatformsT7ee787.T7ee787windows Tff7b72import Te6edf3soundcard
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Te6edf3samplerate
Tff7b72selfTff7b72.Td2a8ffsoundcard Tff7b72= Te6edf3soundcard
Tff7b72if Te6edf3preferred_deviceTb4b4b4:
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffget_speakerTb4b4b4(Te6edf3preferred_deviceTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Te6edf3soundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdevice Tff7b72= Te6edf3soundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUsing output device Tffd700{Tff7b72selfTff7b72.Td2a8ffdeviceTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffall_speakersTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffall_speakersTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdefault_speakerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffdefault_speakerTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffflushTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffget_playerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3samples_per_frameTff7b72=Tff7b72NoneTb4b4b4, Te6edf3low_latencyTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffplayerTb4b4b4(Te6edf3samplerateTff7b72=Tff7b72selfTff7b72.Td2a8ffsamplerateTb4b4b4, Te6edf3blocksizeTff7b72=Te6edf3samples_per_frameTb4b4b4)
Tff7b72def Td2a8ffrelease_playerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72pass
Tff7b72def Td2a8ffget_backendTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_linuxTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72return Te6edf3LinuxBackend
Tff7b72elif Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_windowsTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72return Te6edf3WindowsBackend
Tff7b72elif Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_darwinTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72return Te6edf3DarwinBackend
Tff7b72elif Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72return Te6edf3AndroidBackend
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72None
Te6edf3Backend Tff7b72= Te6edf3get_backendTb4b4b4(Tb4b4b4)
Tff7b72class T56d364SinkTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffhandle_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4, Te6edf3sourceTb4b4b4)Tb4b4b4: Tff7b72pass
Tff7b72def Td2a8ffcan_receiveTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3from_sourceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72True
Tff7b72class T56d364RemoteSinkTb4b4b4(Te6edf3SinkTb4b4b4)Tb4b4b4: Tff7b72pass
Tff7b72class T56d364LocalSinkTb4b4b4(Te6edf3SinkTb4b4b4)Tb4b4b4: Tff7b72pass
Tff7b72class T56d364LineSinkTb4b4b4(Te6edf3LocalSinkTb4b4b4)Tb4b4b4:
Te6edf3MAX_FRAMES Tff7b72= T79c0ff6
Te6edf3AUTOSTART_MIN Tff7b72= T79c0ff1
Te6edf3FRAME_TIMEOUT Tff7b72= T79c0ff8
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3preferred_deviceTff7b72=Tff7b72NoneTb4b4b4, Te6edf3autodigestTff7b72=Tff7b72TrueTb4b4b4, Te6edf3low_latencyTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpreferred_device Tff7b72= Te6edf3preferred_device
Tff7b72selfTff7b72.Td2a8ffframe_deque Tff7b72= Te6edf3dequeTb4b4b4(Te6edf3maxlenTff7b72=Tff7b72selfTff7b72.Td2a8ffMAX_FRAMESTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffdigest_thread Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffdigest_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinsert_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframe_deque Tff7b72= Te6edf3dequeTb4b4b4(Te6edf3maxlenTff7b72=Tff7b72selfTff7b72.Td2a8ffMAX_FRAMESTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffunderrun_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffframe_timeout Tff7b72= Tff7b72selfTff7b72.Td2a8ffFRAME_TIMEOUT
Tff7b72selfTff7b72.Td2a8ffautodigest Tff7b72= Te6edf3autodigest
Tff7b72selfTff7b72.Td2a8ffautostart_min Tff7b72= Tff7b72selfTff7b72.Td2a8ffAUTOSTART_MIN
Tff7b72selfTff7b72.Td2a8ffbuffer_max_height Tff7b72= Tff7b72selfTff7b72.Td2a8ffMAX_FRAMESTff7b72-T79c0ff3
Tff7b72selfTff7b72.Td2a8fflow_latency Tff7b72= Te6edf3low_latency
Tff7b72selfTff7b72.Td2a8ffpreferred_samplerate Tff7b72= Te6edf3BackendTff7b72.Td2a8ffSAMPLERATE
Tff7b72selfTff7b72.Td2a8ffbackend Tff7b72= Te6edf3BackendTb4b4b4(Te6edf3preferred_deviceTff7b72=Tff7b72selfTff7b72.Td2a8ffpreferred_deviceTb4b4b4, Te6edf3samplerateTff7b72=Tff7b72selfTff7b72.Td2a8ffpreferred_samplerateTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Tff7b72selfTff7b72.Td2a8ffbackendTff7b72.Td2a8ffsamplerate
Tff7b72selfTff7b72.Td2a8ffchannels Tff7b72= Tff7b72selfTff7b72.Td2a8ffbackendTff7b72.Td2a8ffdeviceTff7b72.Td2a8ffchannels
Tff7b72selfTff7b72.Td2a8ffsamples_per_frame Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffframe_time Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffoutput_latency Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffmax_latency Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ff__wants_low_latency Tff7b72= Tff7b72False
Tff7b72def Td2a8ffcan_receiveTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3from_sourceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffinsert_lockTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_dequeTb4b4b4) Tff7b72< Tff7b72selfTff7b72.Td2a8ffbuffer_max_heightTb4b4b4: Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72False
Tff7b72def Td2a8ffhandle_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4, Te6edf3sourceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffinsert_lockTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffframe_dequeTff7b72.Td2a8ffappendTb4b4b4(Te6edf3frameTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsamples_per_frame Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsamples_per_frame Tff7b72= Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffframe_time Tff7b72= Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTff7b72*Tb4b4b4(T79c0ff1Tff7b72/Tff7b72selfTff7b72.Td2a8ffbackendTff7b72.Td2a8ffsamplerateTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff starting at Tffd700{Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTffd700}Ta5d6ff samples per frame, Tffd700{Tff7b72selfTff7b72.Td2a8ffchannelsTffd700}Ta5d6ff channelsTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffautodigest Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_dequeTb4b4b4) Tff7b72>Tff7b72= Tff7b72selfTff7b72.Td2a8ffautostart_minTb4b4b4: Tff7b72selfTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffdigest_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__digest_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdigest_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False
Tff7b72def Td2a8ffenable_low_latencyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__wants_low_latency Tff7b72= Tff7b72True
Tff7b72def Td2a8ff__digest_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdigest_lockTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_darwinTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3backend_samples_per_frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffsamples_per_frame
Tff7b72elseTb4b4b4: Te6edf3backend_samples_per_frame Tff7b72= Tff7b72None
Tff7b72with Tff7b72selfTff7b72.Td2a8ffbackendTff7b72.Td2a8ffget_playerTb4b4b4(Te6edf3samples_per_frameTff7b72=Te6edf3backend_samples_per_frameTb4b4b4, Te6edf3low_latencyTff7b72=Tff7b72selfTff7b72.Td2a8fflow_latencyTb4b4b4) Tff7b72as Te6edf3playerTb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Te6edf3frames_ready Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_dequeTb4b4b4)
Tff7b72if Te6edf3frames_readyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffoutput_latency Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_dequeTb4b4b4)Tff7b72*Tff7b72selfTff7b72.Td2a8ffframe_time
Tff7b72selfTff7b72.Td2a8ffmax_latency Tff7b72= Tff7b72selfTff7b72.Td2a8ffbuffer_max_heightTff7b72*Tff7b72selfTff7b72.Td2a8ffframe_time
Tff7b72selfTff7b72.Td2a8ffunderrun_at Tff7b72= Tff7b72None
Tff7b72with Tff7b72selfTff7b72.Td2a8ffinsert_lockTb4b4b4: Te6edf3frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffframe_dequeTff7b72.Td2a8ffpopleftTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72> Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4: Te6edf3frame Tff7b72= Te6edf3frameTb4b4b4[Tb4b4b4:Tb4b4b4, T79c0ff0Tb4b4b4:Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4]
Te6edf3playerTff7b72.Td2a8ffplayTb4b4b4(Te6edf3frameTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_dequeTb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8ffbuffer_max_heightTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffBuffer lag on Tffd700{Tff7b72selfTffd700}Ta5d6ff (height Tffd700{Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_dequeTb4b4b4)Tffd700}Ta5d6ff), dropping one frameTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframe_dequeTff7b72.Td2a8ffpopleftTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffunderrun_at Tff7b72== Tff7b72NoneTb4b4b4:
T8b949e# TODO: Remove debug
T8b949e# RNS.log(f"Buffer underrun on {self}", RNS.LOG_DEBUG)
Tff7b72selfTff7b72.Td2a8ffunderrun_at Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8ffunderrun_atTff7b72+Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_timeTff7b72*Tff7b72selfTff7b72.Td2a8ffframe_timeoutTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffNo frames available on Tffd700{Tff7b72selfTffd700}Ta5d6ff, stopping playbackTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4: Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_timeTff7b72*T79c0ff0.1Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff__wants_low_latencyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__wants_low_latency Tff7b72= Tff7b72False
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3playerTb4b4b4, Ta5d6ff"Ta5d6ffenable_low_latencyTa5d6ff"Tb4b4b4) Tff7b72and Tffa657callableTb4b4b4(Te6edf3playerTff7b72.Td2a8ffenable_low_latencyTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffRun-time enabling low-latency mode on Tffd700{Tff7b72selfTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3playerTff7b72.Td2a8ffenable_low_latencyTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not run-time enable low latency mode on Tffd700{Tff7b72selfTffd700}Ta5d6ff, the operation is not supported by the backendTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbackendTff7b72.Td2a8ffrelease_playerTb4b4b4(Tb4b4b4)
Tff7b72class T56d364PacketSinkTb4b4b4(Te6edf3RemoteSinkTb4b4b4)Tb4b4b4: Tff7b72pass
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────